package com.wjw.java.others.date_;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日历类常用方法
 */
public class Calendar_ {
    public static void main(String[] args) {
        System.out.println("-----------------------------------------");
        get();
        System.out.println("-----------------------------------------");
        set();
        System.out.println("-----------------------------------------");
        add();
        System.out.println("-----------------------------------------");
        getTime();
    }

    /**
     * public int get(int field):
     * 返回给定日历字段的值
     * --------------------------------------------------
     * int field:传递指定的日历字段(YEAR,MONTH...)
     * 返回值：日历字段代表的具体的值
     */
    public static void get(){
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);//年
        int month = calendar.get(Calendar.MONTH)+1;//西方的月0-11,相当于东方的月1-12
        int date = calendar.get(Calendar.DAY_OF_MONTH);//多少号
        int date1 = calendar.get(Calendar.DATE);//多少号,和上面方法的值一样
        int hour = calendar.get(Calendar.HOUR);
        int hour2 = calendar.get(Calendar.HOUR_OF_DAY);//24小时制
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        System.out.println(year+"年");
        System.out.println(month+"月");
        System.out.println(date+"日");
        System.out.println(hour+"时");
        System.out.println(hour2+"时");
        System.out.println(minute+"分");
        System.out.println(second+"秒");
    }

    /**
     * public void set(int field,int value):
     * 将给定的日历字段设置为给定值
     * --------------------------------------------------
     * int field:传递指定的日历字段(YEAR,MONTH...)
     * int value:给指定字段设置的值
     */
    public static void set(){
        Calendar calendar = Calendar.getInstance();
        /*calendar.set(Calendar.YEAR,2020);//设置年为：2020
        calendar.set(Calendar.MONTH,11);//设置月为：11,西方的月0-11,东方的月1-12
        calendar.set(Calendar.DATE,12);//设置日为：12*/
        calendar.set(2020,11,12);//同时设置年月日

        int year = calendar.get(Calendar.YEAR);//年
        int month = calendar.get(Calendar.MONTH)+1;//西方的月0-11,东方的月1-12
        int date = calendar.get(Calendar.DAY_OF_MONTH);//多少号
        int date1 = calendar.get(Calendar.DATE);//多少号,和上面方法的值一样
        System.out.println(year+"年");
        System.out.println(month+"月");
        System.out.println(date+"日");
    }

    /**
     * public abstract void add(int field,int amount):
     * 根据日历的规则，为给定的日历字段增加或减少指定的时间量
     * --------------------------------------------------
     * int field:传递指定的日历字段(YEAR,MONTH...)
     * int amount:增加或减少指定的值(正数：增加、负数：减少)
     */
    public static void add(){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR,2);//增加两年，
        calendar.add(Calendar.MONTH,-3);//把月减少3个月

        int year = calendar.get(Calendar.YEAR);//年
        int month = calendar.get(Calendar.MONTH)+1;//西方的月0-11,东方的月1-12
        int date = calendar.get(Calendar.DAY_OF_MONTH);//多少号
        int date1 = calendar.get(Calendar.DATE);//多少号,和上面方法的值一样
        System.out.println(year+"年");
        System.out.println(month+"月");
        System.out.println(date+"日");
    }

    /**
     * public Date getTime():
     * 返回一个表示Calendar时间值(从历史到现在的毫秒偏移量)的Date对象。
     * 把日历对象，转为日期对象。
     */
    public static void getTime(){
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = sdf.format(date);
        System.out.println(time);
    }
}
